import pandas as pd
import numpy as np
import yfinance as yf
from datetime import datetime, timedelta
# 获取股票数据
def get_stock_data(symbol, start_date, end_date):
stock = yf.Ticker(symbol)
df = stock.history(start=start_date, end=end_date)
return df
# 计算技术指标
def calculate_indicators(df):
df['SMA_20'] = df['Close'].rolling(window=20).mean()
df['SMA_50'] = df['Close'].rolling(window=50).mean()
return df
# 生成交易信号
def generate_signals(df):
df['Signal'] = np.where(df['SMA_20'] > df['SMA_50'], 1, 0)
df['Signal'] = np.where(df['SMA_20'] < df['SMA_50'], -1, df['Signal'])
return df
# 回测策略
def backtest(df):
df['Returns'] = df['Close'].pct_change()
df['Strategy_Returns'] = df['Signal'].shift(1) * df['Returns']
return df
# 主函数
def main():
symbol = 'AAPL'
start_date = datetime.now() - timedelta(days=365)
end_date = datetime.now()
df = get_stock_data(symbol, start_date, end_date)
df = calculate_indicators(df)
df = generate_signals(df)
df = backtest(df)
# 输出结果
cumulative_returns = (1 + df['Strategy_Returns']).cumprod()
total_return = cumulative_returns.iloc[-1] - 1
print(f"Total Return: {total_return:.2%}")
if __name__ == "__main__":
main()
上一篇:没有了,已经是最后文章
下一篇:nodejs
共 0 条评论关于"python 量化交易"
最新评论